// MayBe 函子 处理空值

// 外部传入空值（控制副作用）

class Maybe {
    constructor(value) {
        this._value = value
    }
    static f(value) {
        return new Maybe(value)
    }
    map(fn) {
        return this.isNothing() ? new Maybe(null) : Maybe.f(fn(this._value))
    }
    isNothing() {
        return this._value === null || this._value === undefined
    }
}

let f = Maybe.f(null)
    .map(x => x.toUpperCase())
    // .map(x => null)
    // .map(x => x.split(' '))

console.log(f)
/* 
    这里咱们把空值情况处理了，控制了副作用，我们调用多个map的时候 再试试
*/